package com.sgj.vo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;

import java.util.Date;

/**
 * 支付宝回调实体
 * @Author: Guoji Shen
 * @Date: 2021/11/27 14:10
 */
@Data
public class ALICallbackVo {

    /**
     * 通知时间
     */
    private Date notify_time;

    /**
     * 通知类型
     */
    private String notify_type;

    /**
     * 通知校验 ID
     */
    private String notify_id;

    /**
     * 签名类型
     * 目前支持 RSA2 和 RSA，推荐使用 RSA2
     */
    private String sign_type;

    /**
     * 签名
     */
    private String sign;

    /**
     * 支付宝交易号
     */
    private String trade_no;

    /**
     * 开发者的 app_id
     */
    private String app_id;

    /**
     * 商户订单号
     */
    private String out_trade_no;

    /**
     * 商户业务号
     */
    private String out_biz_no;

    /**
     * 买家支付宝用户号
     */
    private String buyer_id;

    /**
     * 买家支付宝账号
     */
    private String buyer_logon_id;

    /**
     * 卖家支付宝用户号
     */
    private String seller_id;

    /**
     * 卖家支付宝账号
     */
    private String seller_email;

    /**
     * 交易状态
     */
    private String trade_status;

    /**
     * 订单金额
     */
    private Number total_amount;

    /**
     * 实收金额
     */
    private Number receipt_amount;

    /**
     * 开票金额
     */
    private Number invoice_amount;

    /**
     * 付款金额
     */
    private Number buyer_pay_amount;

    /**
     * 集分宝金额
     */
    private Number point_amount;

    /**
     * 总退款金额
     */
    private Number refund_fee;

    /**
     * 实际退款金额
     */
    private Number send_back_fee;

    /**
     * 订单标题
     */
    private String subject;

    /**
     * 商品描述
     */
    private String body;

    /**
     * 交易创建时间
     */
    private Date gmt_create;

    /**
     * 交易付款时间
     */
    private Date gmt_payment;

    /**
     * 交易退款时间
     */
    private Date gmt_refund;

    /**
     * 交易结束时间
     */
    private Date gmt_close;

    /**
     * 支付金额信息
     */
    private FundBillList fund_bill_list;

    /**
     * 优惠券信息
     */
    private String voucher_detail_list;

    @Data
    public static class FundBillList {

        /**
         * 支付金额
         */
        private Number amount;

        /**
         * 支付渠道
         */
        private FundChannel fundChannel;
    }

    @AllArgsConstructor
    public enum FundChannel {
        COUPON("支付宝红包"),
        ALIPAYACCOUNT("支付宝余额"),
        POINT("集分宝"),
        DISCOUNT("折扣券"),
        PCARD("预付卡"),
        FINANCEACCOUNT("余额宝"),
        MCARD("商户储值卡"),
        MDISCOUNT("商户优惠券"),
        MCOUPON("商户红包"),
        PCREDIT("蚂蚁花呗");

        @Getter
        private String message;
    }
}